package mz.co.research.client.view;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.i18n.client.Constants;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Widget;
import com.smartgwt.client.types.Side;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;

/**
 * Example file.
 */
public class CwSearch extends ContentWidget {
	/**
	 * The constants used in this Content Widget.
	 */
	public static interface CwConstants extends Constants {
		String cwSearchName();

		String cwSearchDescription();
	}

	/**
	 * An instance of the constants.
	 */
	private final CwConstants constants;

	/**
	 * Constructor.
	 * 
	 * @param constants
	 *            the constants
	 */
	public CwSearch(CwConstants constants) {
		super(constants.cwSearchName(), constants.cwSearchDescription(), true);
		this.constants = constants;
	}

	@Override
	public Widget onInitialize() {
		final TabSet tabSet = new TabSet();
		tabSet.setTabBarPosition(Side.TOP);
		tabSet.setWidth(400);
		tabSet.setHeight(800);

		Tab tTab1 = new Tab("Blue", "pieces/16/pawn_blue.png");
		Img tImg1 = new Img("pieces/48/pawn_blue.png", 48, 48);
		tTab1.setPane(tImg1);
		tTab1.setCanClose(true);

		Tab tTab2 = new Tab("Green", "pieces/16/pawn_green.png");
		Img tImg2 = new Img("pieces/48/pawn_green.png", 48, 48);
		tTab2.setPane(tImg2);

		tabSet.addTab(tTab1);
		tabSet.addTab(tTab2);

		HLayout buttons = new HLayout();
		buttons.setMembersMargin(15);

		IButton addButton = new IButton("Add Tab");
		addButton.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				// alternate between yellow pawn and green cube
				if (tabSet.getTabs().length % 2 == 0) {
					Tab tab = new Tab("Yellow", "pieces/16/pawn_yellow.png");
					Img img = new Img("pieces/48/pawn_yellow.png", 48, 48);
					tab.setPane(img);
					tabSet.addTab(tab);
				} else {
					Tab tab = new Tab("Green", "pieces/16/cube_green.png");
					Img img = new Img("pieces/48/cube_green.png", 48, 48);
					tab.setPane(img);
					tabSet.addTab(tab);
				}
				if (tabSet.getTabs().length == 0) {
					tabSet.selectTab(0);
				}
			}
		});

		IButton removeButton = new IButton("Remove Tab");
		removeButton.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				tabSet.removeTab(tabSet.getTabs().length - 1);
			}
		});

		buttons.addMember(addButton);
		buttons.addMember(removeButton);

		VLayout vLayout = new VLayout();
		vLayout.setMembersMargin(15);
		vLayout.addMember(buttons);
		vLayout.addMember(tabSet);
		vLayout.setAutoHeight();

		return vLayout;
	}

	@Override
	protected void asyncOnInitialize(final AsyncCallback<Widget> callback) {
		GWT.runAsync(CwSearch.class, new RunAsyncCallback() {

			public void onFailure(Throwable caught) {
				callback.onFailure(caught);
			}

			public void onSuccess() {
				callback.onSuccess(onInitialize());
			}
		});
	}
}
